package logv

import (
	"context"
	"fmt"
	"time"

	"github.com/rs/zerolog"
	"github.com/rs/zerolog/log"
)

func masdfhhhin() {
	fmt.Println("=== log.Ctx(ctx) 使用示例 ===")

	// 初始化logv
	SetLevel(zerolog.InfoLevel)

	// 1. 创建带追踪ID的context
	ctx := WithNewTraceID(context.Background())
	ctx = WithNewRequestID(ctx)

	fmt.Println("1. 基本用法:")
	log.Ctx(ctx).Info().Msg("使用log.Ctx(ctx).Info().Msg()方式")

	fmt.Println("2. 带结构化字段:")
	log.Ctx(ctx).Info().
		Str("method", "log.Ctx").
		Str("location", "张家坡").
		Bool("deep_rooted", true).
		Msg("带结构化字段的context日志")

	fmt.Println("3. 不同日志级别:")
	log.Ctx(ctx).Debug().Msg("Debug级别的context日志")
	log.Ctx(ctx).Warn().Str("warning", "测试警告").Msg("Warning级别的context日志")
	log.Ctx(ctx).Error().Str("error", "测试错误").Int("code", 500).Msg("Error级别的context日志")

	fmt.Println("4. 复杂结构化日志:")
	log.Ctx(ctx).Info().
		Str("user_id", "12345").
		Str("action", "login").
		Str("ip", "192.168.1.100").
		Int("attempt", 1).
		Bool("success", true).
		Dur("duration", 150*time.Millisecond).
		Msg("用户登录成功")

	fmt.Println("5. 新的context:")
	newCtx := WithNewTraceID(context.Background())
	newCtx = WithNewRequestID(newCtx)
	log.Ctx(newCtx).Info().Msg("新的context - sssssssssssssssssssssssssssssssssssssssssss")

	fmt.Println("6. 混合使用:")
	// 使用logv API
	InfoCtx(ctx, "使用logv的InfoCtx")
	// 使用zerolog直接方式
	log.Ctx(ctx).Info().Msg("使用log.Ctx的方式")

	fmt.Println("7. 模拟HTTP请求处理:")
	handleRequest(ctx)

	// 等待写入完成
	time.Sleep(200 * time.Millisecond)
	Close()

	fmt.Println("\n=== 测试完成 ===")
	checkLogFile()
}

func handleRequest(ctx context.Context) {
	// 为这个请求创建新的request ID
	ctx = WithNewRequestID(ctx)

	log.Ctx(ctx).Info().
		Str("method", "POST").
		Str("path", "/api/users").
		Str("user_agent", "Mozilla/5.0").
		Msg("收到HTTP请求")

	// 模拟业务处理
	log.Ctx(ctx).Debug().Msg("开始处理业务逻辑")

	log.Ctx(ctx).Info().
		Str("table", "users").
		Str("operation", "SELECT").
		Dur("duration", 25*time.Millisecond).
		Msg("数据库查询完成")

	log.Ctx(ctx).Info().
		Int("status_code", 200).
		Str("response", "success").
		Msg("HTTP请求处理完成")
}

func checkLogFile() {
	today := time.Now().Format("2006-01-02")
	filename := fmt.Sprintf("logs/%s.txt", today)

	fmt.Printf("检查日志文件: %s\n", filename)
	// 这里可以添加文件检查逻辑
}
